package com.prize.controller;

import com.prize.image.apis.FileControllerApi;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.RemoveObjectArgs;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.util.UUID;

/**
 * @descriptions: 图片上传下载
 * @author: yunqiang
 * @date: 2022/5/28 19:30
 */
@Api(tags = {"图片管理：图片上传和删除"})
@RestController
@RequestMapping("/api/v1/file")
public class FileController implements FileControllerApi {


    @Resource
    private MinioClient minioClient;
    // Minio 配置。实际项目中，定义到 application.yml 配置文件中
    //private String endpoint = "http://127.0.0.1:9000";
    //private String bucket = "yudaoyuanma";

    @Value("${endpoint}")
    private String endpoint;

    @Value("${bucket}")
    private String bucket;


    @Override
    @ApiOperation(value = "上传图片")
    @PostMapping("/update_image")
    public String upload(MultipartFile file) throws Exception{
        // 上传
        String path = UUID.randomUUID().toString(); // 文件名，使用 UUID 随机
        minioClient.putObject(PutObjectArgs.builder()
                .bucket(bucket) // 存储桶
                .object(path) // 文件名
                .stream(file.getInputStream(), file.getSize(), -1) // 文件内容
                .contentType(file.getContentType()) // 文件类型
                .build());
        // 拼接路径
        return String.format("%s/%s/%s", endpoint, bucket, path);
    }


    /**
     * 删除文件
     */
    @Override
    @ApiOperation(value = "删除图片")
    @PostMapping("/delete_image")
    public void delete(String path) throws Exception{
        minioClient.removeObject(RemoveObjectArgs.builder()
                .bucket(bucket) // 存储桶
                .object(path) // 文件名
                .build());
    }
}
